23

» WarCraft 3 / Отмена приказа предмета

Похожие вопросы:

ответ
Порядок строк ид приказа не сменить, это работает только у канала ибо это спец скилл для визуального эффекта. У морфов это работать не будет.

23

» WarCraft 3 / war3mapImported

Похожие вопросы:

ответ
Модель можешь расположить куда захочешь, а вот текстура должна быть в корне карты(в модели она так занесена).
\flag.blp
Должно работать, пробуй.

23

» WarCraft 3 / Утечки

Похожие вопросы:

ответ
Какой ужас
Делай вот так.
бронепоезд
создать.
направить на 128 точек наверх(90)
сделать неперманентным
текст удалится через 3 секунды
текст затухнет до 100% прозрачности через 3 секунды
Вот чёрт. не успел приплюснуть к посту.
ответ
еще раз - лучше скачать handle counter и посмотреть его показания, сколько объектов создается при касте
стремление сделать все безутечно похвально, но все хорошо в меру
ответ
Steal nerves:
Да. При чем две.( Position of Dying unit ).
скрин скинул выше, но там ошибка. И если раскрыть, то обнаруживается еще одна утечка: на гуи Point(0,0), а на jass эта команда называется по-другому Location(0,0), эта функция создает точку
раскрыть
попробуй раскрутить, и использовать эту
native CreateItem takes integer itemid, real x, real y returns item
через CS: call CreateItem( id, GetUnitX(u), GetUnitY(u))
где id - ид-номер типа предмета, u - юнит. Ввести тип предмета, и юнита нужно.
можно еще запомнить как-то, чтобы к предмету как-то обращаться
через CS: set it = CreateItem( id, GetUnitX(u), GetUnitY(u))
где it - переменная предмета. Объявить переменную и обращаться
ответ
Нет, 100 раз писали Player не вызывает утечек, их не нужно обнулять.
Бот выдал ссылку на статьи, прошу прочитать...

23

» WarCraft 3 / Текстура склона

Похожие вопросы:

ответ
Сначала, Хоффман, думал обозвать тебя лентяем, но потом не удивился, почему ты ничего не нашел !!!
Близзарди засунули ети текстуры очень глубоко:
в архиве War3x.mpq есть архивы с названиями в виде букв английского алфавита, так вот твои заветние текстуры ето Cliff0.blp и Cliff1.blp в архиве Z.mpq.
Итого: War3x.mpq / Z.mpq / ReplaceableTextures / Cliff / Cliff0.blp
War3x.mpq / Z.mpq / ReplaceableTextures / Cliff / Cliff1.blp
ответ
Как вариант - попытаться в одной текстуре клиффов попробовать разместить сразу два визуальных решения.
Текстуры клиффов находятся в mpq архиве по адресу ReplaceableTextures\Cliff\
Текстура клиффов
A. рандумные поверхности клиффов
B. тайлинг прямых граней, верхушка клиффа
C. тайлинг прямых граней, низ клиффа
D. угловые тайлы, выбирается 1 рандумный
E. угловые тайлы, низ клиффа
F. применяютя у мостов и подъёмников
Каждому клиффсету принадлежит два файла:
Угловатые клифы ReplaceableTextures\Cliff\Cliff0.blp
Прямые клифы ReplaceableTextures\Cliff\Cliff1.blp
Вроде всё правильно написал, если не прав поправьте.
ответ
Декорации склонов не подходят?
ответ
Мне не надо так, мне надо что-бы КАЖДЫЙ клиф КАЖДОГО таила был свои, со своими текстурами
в очередной раз великие планы рушатся под натиском жестокой реальности

23

» WarCraft 3 / Событие на получение урона

Похожие вопросы:

ответ
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
Ответ: Да есть способ: вот шпаргалка
ответ
Ruslan24, событие - юнит атакован. Он не показывает урон. Событие на урон добавляется конкретному юниту при входе в игровой рект или инициализации.
ответ
Урон настраивается через уровень способности, или как было сказано unit - damage target
команда для использования нестандартной способности берется от той способности, на основе которой ты её сделал, и если это цепь тралла - Unit - issue order with targetign a unit - orc - chain lighting
ответ
Nifistofi, делая неуязвимым не на 0,01 а на 0,00
ответ
Steal nerves:
связь триггеров
  1. ПРИКАЗ сначало юнит Б получает атаковать цель А. Может стоять далеко от нее, поэтому бежит поближе к цели А.
  2. АНИМАЦИЯ Потом начинает замахиваться, производить анимацию атаки. Короче событие юнит атакован помогает сказать, когда начнется анимация атаки. Надо понимать, что она не сейчас производится, а будет через секунду. За это время можно успеть отменить атаку, или сменить анимацию атаки.
  3. УРОН Событие юнит получает урон показывает. что юнит получил еще урона, а получит урон. Можно сделать всякие хитрости со здоровьем и прочее. Еще нужно знать. что "юнит атакован" не равно "юнит получает урон". Потому что например, если запустить стрелу. то прилетит не сразу. да и промахнутся можно
Юнит получил приказ атаковать - реагирует на того, кто получил приказ. И того кого хотят атаковать.
Юнит атакован - реагирует на того. кого атаковали. И на того. кто является инициатором атаки.
Получает урон - реагирует на того кто получил урон. И кто нанес. Еще можно узнать сколько нанесли урона.
дубль 2
"Юнит атакован" не равно "Юнит получил приказ атаковать". По логике все верно, но должен получить приказ, затем подбежать поближе, а потом ударить или стрельнуть.
"Юнит атакован" срабатывает в тот момент, когда начинает делать анимацию атаки (замах, начинает натягивать лук и прочее. У кого что.). Короче событие срабатывает, но анимация происходит через 0.00 секунд.
Когда юнит проигрывает анимацию атаки (клинком проникает глубже в противника, из лука вылетает стрела и летит, снаряды из мортир летят к цели, и прочее). Можно отменить приказом (только вот не знаю у ренживиков выпущенные снаряды продолжают летать), проверяй до момента получения урона получал какой-нибудь другой приказ.
"Юнит получает урон" - фиксирует получение урона. А это фиксирует, что атака была успешна, только более поздняя фиксация

23

» WarCraft 3 / нужна модель

Похожие вопросы:

ответ
Поиск по сайту, если не нашлось, сперва сюда:
Потом сюда:

В следующий раз за такие темы будут варны.
ответ
Статьи по конвертации из других игр в самом низу
Тема для заказа на модели
ответ
ответ
Есть ссылка на подходящую тему: xgm.guru/p/wc3/needmodels
ответ
это Q/A
тут разрешены только вопросы
в следующий раз за заявки типа "сделайте мне что либо" пойдут варны

23

» WarCraft 3 / Как отследить?

Похожие вопросы:

ответ
Если нету баффа, а тупо урон то кастуем скилл даммиком и проверяем на урон от этого дамми юнита.
ответ
quq_CCCP, а если за монстра дали 8 голды?) А если расходы?
(Upkeep)

Помочь тебе может такая функция - Игрок - Player score - золота добыто.
Когда изменяется количество золота игрока - можно сравнивать предыдущее значение добытого золота и текущее.
(К счастью для тебя этот пункт не считает награду за уничтожение)
ответ
Каждую секунду пикаешь юнитов по всей карте,если есть бафф то дать способность если нету баффа и есть способность (крита) то удалить способность
ответ
Проверкой на неуязвимость есть 2 версии проверки, одна требует мемхак а друга нет.
Там проверка на то что дамми юнит сможет нанести урон юниту или нет, если не сможет - юнит неуязвим.
ответ
Я думаю захват делается не так, как у тебя - у тебя захват будет мгновенный
Там нужна целая переменная на прогресс захвата, и переменные для подсчета юнитов с обеих команд для того чтобы найти скорость захвата

23

» WarCraft 3 / Проблема с освещением

Похожие вопросы:

ответ
восстанови MiscData.ini
ответ
Это происходит из-за per-vertex освещения. От подобных визуальных артефактов очень сложно избавиться, но можно немного замаскировать их, подкорректировав модели освещения (например, немного уменьшить интенсивность diffuse освещения и увеличить ambient):
ответ
В War3 Model Editor, в окне настроек материалов убрать метку "незатенённый" или "незатуманенный" (лучше обе, а то там вроде как они местами перепутаны).

23

» WarCraft 3 / Камера

Похожие вопросы:

ответ
ответ
Д -Группа игроков - все игроки
д - Камера - сбросить камеру игры выбранный игрок на стандартный вид
ответ
Обойти можно взятием цели камеры в переменную в момент нажатия стрелки и с последующим восстановлением цели камеры в исходной точке.
Установить Point - Цель текущей камеры
Камера - передвинуть камеру к Point в течение 0 сек.
Можно орудовать стрелками в т.ч. если зажать кнопкой мыши на мордашке двигающегося юнита.
Карта пример с управлением прилагается.
Способ топорный, но может натолкнёт на что...
ответ

23

» WarCraft 3 / Ограничение на количество войск

Похожие вопросы:

ответ
Steal nerves:
скачиваете JNGP, устанавливаете его, открываете редактор jngp. открываете или создаете карту и работаете. короче снимает лимит.
Однако, если сохраните в jngp и попробуете открыть обычным редактором. возможно карта не откроется, так как карта вышла за пределами лимита
xgm.guru/forum/showthread.php?t=3452 WEU - старая программа, то, что пишут там, тебе не нужно делать. просто скачай JNGP, jngp - по новее
xgm.guru/forum/showthread.php?t=52230 есть ссылка в комментах, перейдете на страничку где написано все о гримори
насчет юнитов и итемов далеко не заходил и не было такого, но вот проблемы с декором было много

23

» WarCraft 3 / Контроль юнитов врага

Похожие вопросы:

ответ
в футах это вызвано тем, что там 100500 юнитов одновременно у игрока, а в мили возможно из-за лагов.
т.е. триггерно такое не сделаешь, недочёт самого движка.
ответ
ИИ стандартный, полагаю? Стандартному ИИ вроде как вижн не важен, он и так знает где все находятся, если мне не изменяет память. Как от него не прячься, найдет сразу. Если уж очень хочется - давать юнитов нейтралам и делать их союзным всем ботам. (игроков 16, если не изменяет память). Или давать союзным игрокам, при наличии. По крайней мере не будут мчаться в след за армией. Однако вполне могут быть более качественные решения проблемы, я стандартный ИИ не изучал, не могу быть уверен в офигительности предложенного решения. :)
ответ
Чтобы боевая единица не убегала - нужно установить "нет" в позиции "Может бежать" в РО.
ответ
Делаешь несколько условий, например если я правильно понял то
Событие отряда - юнит заходит в область
Устанавливаем условие - входящий юнит типа - или любой входящий юнит (зависит от того что ты хочешь )
далее через действия - отряд - выбрать всех юнитов в данной области и сделать действие - передать другому игроку ( идеально подойдет нейтрально враждебные) и так же пишешь отряд - выбрать всех в данной области и приказать идти нападая на противников (если это нейтралы то они будут нападать на всех кроме нейтрально пассивных ) и так далее.
И то чтобы контроль вернулся есть два варианта
1.Если в определенной области то если юнит заходит в область сменить владельца и цвет так же через отряд
2.Ну или например делаешь еще один тригер с таймером, в 1 тригере ставишь создать таймер который зазвонит - через (твое время ) - далее во втором тригере используешь таймер истекает - отряд (лучше конечно тогда использовать переменные на отряде ) и выбрать всех юнитов в отряде - сменить владельца (Игрок(Целая А)) как то так.

23

» WarCraft 3 / Ошибка в коде?

Похожие вопросы:

ответ
низнаю какой спел у героя перезаряжается, на какой хватает маны, какие спелы у героя вообще есть, и в прочем на основе каких спелов они сделаны
да здравствует бд
FenikS1991:
Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
ответ
нет
no
ответ
FenikS1991, убери стоимость в 15 маны.
ответ
~8gabriel8:
mishanka122:
Если во всех картах одинаковый id, значит покопайся в хеше.
Это как, можно в личку?
Проблему решил, переделав стандартную способность, а не создавая нестандартную. Это почти что панацея от подобных случаев, когда id (ещё называют raw-code) способности меняется.
ответ
Не boolean а booexpr - это фильтр для группы, там никакие локалка не нужны.
Саму группу можно перебирать в цикле что правда дает шанс попасть в лимит операций и грохнуть поток.
Делать нужно примерно вот так :
function OnlyEnemyGroundAlive takes nothing returns boolean
    return GetUnitState( GetFilterUnit(), UNIT_STATE_LIFE )> 0.405 and IsUnitEnemy( GetFilterUnit(), bj_groupEnumOwningPlayer ) and IsUnitType( GetFilterUnit(), UNIT_TYPE_GROUND )
endfunction

function DamageEnemy takes nothing returns nothing
    call UnitDamageTarget( bj_lastReplacedUnit, GetEnumUnit(), 100.00, false, false, ATTACK_TYPE_NORMAL,  DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
endfunction

function Temp takes nothing returns nothing
    local group grp = CreateGroup( ) //создаём группу юнитов
    local real dx = 0.00   // координата x 
    local real dy = 0.00   // координата y
    
    set bj_groupEnumOwningPlayer == Player(0) // глобальная переменная чтобы передать данные в фильтр
    call GroupEnumUnitsInRange( grp, dx, dy, 512.00, Condition( function OnlyEnemyGroundAlive) )
    set bj_lastReplacedUnit = GetTriggerUnit( )// глобальная переменная чтобы передать данные в другую функцию.
    call ForGroup( grp, function DamageEnemy )
    
    call DestroyGroup( grp )
    
    set grp = null
endfunction
1 строчка бывает только у гуишников.

23

» WarCraft 3 / Проблема со способностью

Похожие вопросы:

ответ
у тебя есть несколько проблем:
1)у тебя точка не удаляется и зависает в памяти что даёт утечки(лаги)
2)у тебя не устанавливается группа что даёт утечки(лаги) + нельзя отследить людей в ней
3)у тебя создаётся спецэффект, но не удаляется что даёт утечки(лаги)
Нужно создать переменную типа Отряд(то есть группа):
назвать её допустим GROUP
Нужно создать переменную типа Боевая единица:
назвать её допустим UNIT
нужно сделать так:
в триггере где событие ПРИМЕНЯЕТ СПОСОБНОСТЬ создать действие:
установить применяющий юнит = UNIT
установить FireStrike = случ точка в области Fire strike
установить группу GROUP = юниты в области 300 от Fire strike соответствующий юнит не равно UNIT
создать эффект
удалить эффект
call RemoveLocation(udg_FireStrike)
call DestroyGroup(udg_GROUP)
ответ
В предмете ID кулдауна разный ставьте.
ответ
событие - юнит получает урон
условие - юнит получивший урон имеет баф (баф стрелы)
Pippetz, лучше не яд а ледяные стрелы
ответ
nvc123:
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил.
nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath

globals
    mhook   ahook[100]
    integer ihook = -1
endglobals
    
struct mhook
        unit       host = null
        unit       target = null
        real       face = 0
        real       speed = 0
        real       dis = 0
        real       dismax = 0
        integer    chaini = 0
        unit       chain[50]
        real       scale = 0
        integer    move = 1
        integer    i = 0
		
		
        static method Create takes unit host, real tx, real ty, real scale returns mhook
        local mhook h = mhook.create()
        local integer i = GetPlayerId(GetOwningPlayer(host))
        local real x = GetUnitX(host)
        local real y = GetUnitY(host)
        local real f = GetAngleXY(x,y,tx,ty)
            set h.host = host
            set h.face = f
            set h.speed = 600
            set h.dismax = 1400
            set h.scale = scale
            set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
            set h.i = i
            call UnitAddAbility(h.chain[0],'Amrf')
            call UnitAddAbility(h.chain[0],'Amrf')
            call SetUnitFlyHeight(h.chain[0],50,0)
            call SetUnitPathing(h.chain[0],false)
            return h
        endmethod
        
        method Start takes nothing returns boolean
            if ihook < 1000 then  
                set ihook = ihook + 1
                set ahook[ihook] = this
                return true
            else
                return false
            endif
        endmethod
        
        method Destroy takes nothing returns nothing
        local integer i = 0
            loop
            exitwhen i > ihook
                if ahook[i] == this then
                    set ahook[i] = ahook[ihook]
                    set ahook[ihook] = 0
                    set ihook = ihook - 1
                    set i = ihook // выход из цикла
                endif
            set i = i + 1
            endloop
            set this.target = null
            set this.host = null
            call this.destroy()
        endmethod
        
        method Move takes nothing returns nothing
        local integer i1 = 0
        local integer l = 0
        local real x
        local real y
        local real xh
        local real yh
        local real f
            if move == 1
                set dis = dis + speed*0.025
                loop
                 exitwhen i1 > .chaini
                    set x = GetUnitX(.chain[i1])
                    set y = GetUnitY(.chain[i1])
                    if i1 > 0 then
                        set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
                        call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
                    else    
                        set f = face
                        call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
                    endif
                    call SetUnitFacing(chain[i1],f)
                 set i1 = i1 + 1
                endloop
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
                set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
                set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
                //Create==================
                
                if GetDisXY(xh,yh,x,y) >= .scale/2 then
                    set chaini = chaini + 1
                    set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call SetUnitFlyHeight(.chain[.chaini],50,0)
                endif
                if dis > dismax then
                    set move = 0
                endif
            else
                //REVERSE=============
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                set chain[chaini+1] = host
                loop
                exitwhen l > chaini
                        set x = GetUnitX(chain[l])
                        set y = GetUnitY(chain[l])
                        //if chain[chaini] == null then
                        //    set f = GetAngleXY()
                        //endif
                        set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
                        call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
                        call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
                        call SetUnitFacing(chain[l],f-180)
                set l = l + 1
                endloop
                //Destroy==================
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
                    call RemoveUnit(chain[chaini])
                    set chain[chaini] = null
                    set chaini = chaini - 1
                    if chaini == -1 then
                        call .Destroy()
                    endif
                endif
            endif
        endmethod
        
endstruct

private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t 
    loop
    exitwhen i > ihook
        if ahook[i] != 0 then
            set h = ahook[i]
            //--run--//
            call h.Move()
        else
            set ahook[i] = ahook[ihook]
            set ahook[ihook] = 0
            set ihook = ihook - 1
            set i = i - 1 
        endif
    set i = i + 1
    endloop
    //call DestroyGroup(g)
    set g = null
    set t = null
endfunction

function Trig_HookC_Bool takes nothing returns boolean
    if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
        return true
    else
        return false
    endif
endfunction

function Trig_HookC_Actions takes nothing returns nothing
local mhook h
    set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
    call h.Start()
endfunction

function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Trig_HookC_Actions )
    call TriggerAddCondition(t,function Trig_HookC_Bool)
    call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction

endlibrary
ответ
Просто оставлю это и это здесь

23

» WarCraft 3 / Пути

Похожие вопросы:

ответ
Увы, такого сделать нельзя. Чтобы осуществлять подмену, используй улучшение "Темный".
ответ
Sergey103, для этого выбери один блокиратор, потом нажми на "Правка" и нажми "Выбрать все особые", потом просто удали их.
ответ
Здесь не делают заказы. Насколько помню есть специальные темы для заказов. Но совершенно случайно у меня оказалась пара свободных минут
Импортировать TerrainArt\Ruins\*.blp
ответ
Steal nerves:
Все разобрался, я с обычной декорации сильно протупил, невнимательность.
Еще нашел другой способ, см. карту
ответ
Steal nerves:
Вот. Есть текст про описание движения как я понял (вот в чем разница между конным и пешим пока тоже не понял, интересует вот, что дает конный)
Эти паффинги, и типы движения взаимосвязаны. У некоторых есть баги, которыми можно воспользоваться. Например, чтобы летающие юниты игнорили ландшафт и летели прямо (вот на клифах может быть криво). На форуме дофига такого. Также можно сделать нелетающих летающими, дать сфинкс или превратиться в ворона (тоже баг) Ну и так далее
Как запретить перемещаться:
  1. Блокираторы пути. Есть баги короче xgm.guru/p/wc3/181384
  2. см. карту SetPathingRect (скачал с хайва)

23

» WarCraft 3 / Масштабирование модели

Похожие вопросы:

ответ
В мдл висе увеличить размер модели.
ответ
Tiodor, стоп, как это по тем же точкам? При изменении положения базовой кости, разве присоединённые к ней остальные не должны меняться? В-общем не могу я исправить)) Эта модель должна заменять архивную... К какой-либо карте она не относится. Так-то =(

После усердного копания архивов игры и парочки тестов, нашёл для себя выход) В War3Patch.mpq/Units/UnitUI.slk хранились нужные мне данные. Ранее подобных проблем не было (о почему же!), поэтому и не пытался издеваться над игрой)
ответ
EnergyFrost, для создания геройского сияния воспользуйся этой наработкой.
ответ
EnergyFrost:
А с каким юнитом проблема? И в каком триггере ты регулируешь масштаб? А то лень копаться в РО и РТ
К примеру, юнит "Атрозис 2" меньше юнита "Атрозис 1", хотя в РО размер задан больше, модель стандартная. Через триггеры масштаб не регулируется. Возможно, проблема с триггерами в папке "bu", которые отвечают за мгновенное строительство и улучшение.
Всем спасибо, проблему распаковал. Проблема была действительно в триггерах, которые мгновенно достраивают здания. При улучшении, здания как бы "начинают расти", но триггер делает прогресс улучшения равным 100% и масштаб остается прежним.
ответ
в mdlvis можно модель увеличить

23

» WarCraft 3 / Библиотека звуков

Похожие вопросы:

ответ
Obelick, эта либо не трогает мультибоарды
она по точкам(location) в основном работает
Obelick:
учить ради них джас и переписывать мне настолько лень
если ты нормально знаешь гуи и имеешь базовые знания по использованию гугл переводчика то переписать мультибоард на jass много времени не займёт
кроме того тебе не обязательно переписывать полностью
можно сконвертировать в код и поправить то что вызывает утечки
если ты говоришь об утечках в функции установки значения ячейки мультибоарда то их можно убрать следующим кодом
define MultiboardSetItemValueBJ(mb,col,row,val)=myMultiboardSetItemValue(mb,col,row,val)

void myMultiboardSetItemValue(multiboard mb, integer col, integer row, string val){
    multiboarditem mbitem = MultiboardGetItem(mb, row-1, col-1)
    MultiboardSetItemValue(mbitem, val)
    MultiboardReleaseItem(mbitem)
    mbitem=null
}
вставь его в шапку карты (туда где ты ALL.j подключал)
правда после этого автозаполнение строк/столбцов перестанет работать и придётся делать его циклом

23

» WarCraft 3 / call ForGroup()

Похожие вопросы:

ответ
Zeuz, в доте нету такого количества таймеров
во многих нормальных картах сделано так как в статьях
Zeuz:
покажи пример в обычном jass
скопируй в карту а потом вытащи из неё j файл или напиши в коде букву на отдельной строке (тогда тебе выдаст ошибку и будет показан исходный код)
но на обычном джассе этот код больше и писать/читать его неудобно так что держи
ответ
Это я сделал в первую очередь, интереса ради. Разницы ноль, увы.
Разве, что запускает две функции одновременно, делая всего лишнюю операцию.
И так:
  1. Нужен массив для хранение TypeId
  2. Лучше глобальную группу использовать, а то локальная у тебя только на инициализации выполнилась.
  3. Используем loop endloop для большей эффективности
  4. Проверять лучше всё таки стеком,
Насчет дестроя группы. Она же создается один раз, если я ее уничтожу - триггер вообще выполнятся не станет, разве не так?
Это не так, она уже использовалась и стала локальной, и да. Лучше глобальную используй.
Лучше внутри таймера проверять ограниченным кол-во крипов через стек. т.е. о 0 до N ограничения, которые не повлияет на производительность. при этом проверяя на наличие их безжизненности, потом просто воссоздавая их по данным сохранённым внутри данных по юниту.
  1. Если мобы были ранее на карте, то и ранее должны были быть зарегестрированы в массив данных, где храниться их TypeId, PosX\Y и п.р.
ответ
во первых где дебаг
во вторых не фиг вешать на хэндл таймера всякую фигню
юзай список и пробегай по нему таймером
и будет тебе счастье
в третьих если говоришь что где то ошибка ты должен указать :
  1. строку с ошибкой
  2. доказательства того что она произошла (скрин + лог)
  3. собственные попытки её исправить
в четвёртых предоставить карту
короче либо предоставь всю информацию либо перепиши код по нормальному
как правильно переписать ты сможешь прочесть в статьях
либо увидеть в любом более менее нормальном движке (тот же движок вара)
ответ
Рев? - тогда приказ без цели
native IssueImmediateOrderById takes unit whichUnit, integer order returns boolean
Создай юнитов по 1 на каждого игрока и прикажи им
call IssueImmediateOrderById(<твой юнит>, 852164)
приказ можно менять только Каналу и книге заклинаний, у остальных способностей нет смысла
ответ
Всё, разобрался, вопрос снимаю)

23

» Unity / Скрипт

Похожие вопросы:

ответ
    var cloneButon = Instantiate(button);
    cloneButon.transform.SetParent(button.transform, false);
    cloneButon.name = "button." + cloneButon.transform.GetSiblingIndex();
У сетпарента обязательно выставляешь false, тогда положение/поворот/масштаб будет "как надо", на том же месте.
ответ
Возможно порядок вызова отрабатывает не правильно. Я бы сделал немного иначе. Внутри фигуры запрашивал бы данные от кубов.
	var cubeComponents = GetChildrenComponents<CubComponent>(); // получаем список дочерних компонентов типа CubeComponent
	var isRightCollision = cubeComponents.Any(cube => cube.isRight); // проверяем у каждого флаг isRight и если хотя бы у одного стоит, то возврашаем true
	// .. остальные действия
ответ
Дорогой друг.
Вопрос должен содержать сам вопрос, а не задачу с мутной постановкой.
Следующий раз получишь победные штрафные баллы.